package com.raitcon.hibernate.db;

import com.raitcon.hibernate.bean.HibernateSessionFactory;
import com.raitcon.hibernate.bean.Profesor;
import com.raitcon.hibernate.factory.HibernateUtil;
import java.util.List;
import org.apache.log4j.Logger;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

public class ProfesorDB {

    protected static Logger log = Logger.getLogger(ProfesorDB.class);
    private Session session = null;

    public ProfesorDB() {
        this.session = HibernateUtil.getSessionFactory().getCurrentSession();
    }

    public String insertProfesor(Profesor pro) {
        int result = 0;
        try {
            System.out.println("metodo insert");
            session = HibernateSessionFactory.getSession();
            System.out.println("session: " + session);
            System.out.println("Try");
            Transaction ts = session.beginTransaction();
            System.out.println("Transaction");
            session.save(pro);
            System.out.println("Save");
            ts.commit();
            System.out.println("Se inserto correctamente");
            result = 1;
            return "Se guardó satifactoriamente profesor:"+pro.getIdProfesor();
        } catch (HibernateException ex1) {
            System.out.println("HibernateException : " + ex1);
            return "Se generó errores al intentar guardar profesor:"+pro.getIdProfesor();
        } catch (Exception ex2) {

            System.out.println("Exception : " + ex2);
            return "Se generó errores al intentar guardar profesor:"+pro.getIdProfesor();
        } finally {
            session.close();
        }
    }

    public Integer updateProfesor(Profesor pro, long id) throws Exception {
        int result = 0;
        try {
            System.out.println("metodo update");
            session = HibernateSessionFactory.getSession();
            System.out.println("try");
            Transaction ts = session.beginTransaction();
            System.out.println("Transaction");
            Profesor proUpdate = (Profesor) session.get(Profesor.class, id);
            proUpdate.setIdProfesor(pro.getIdProfesor());
            proUpdate.setNombre(pro.getNombre());
            proUpdate.setApellidoPat(pro.getApellidoPat());
            proUpdate.setApellidoMat(pro.getApellidoMat());
            proUpdate.setDni(pro.getDni());
            proUpdate.setDireccion(pro.getDireccion());
            proUpdate.setFechaNacimiento(pro.getFechaNacimiento());
            session.update(proUpdate);
            System.out.println("Update");
            ts.commit();
            System.out.println("Se modifico correctamente");
            result = 1;
            return result;
        } catch (HibernateException ex1) {
            return result;

        } catch (Exception ex2) {
            return result;
        } finally {
            session.close();
        }

    }

    public Integer deleteProfesor(Profesor pro) throws Exception {
        int result = 0;
        session = HibernateSessionFactory.getSession();
        try {
            Transaction ts = session.beginTransaction();
            session.delete(pro);
            ts.commit();
            System.out.println("Se elimno correctamente");
            result = 1;
            return result;
        } catch (HibernateException ex1) {
            return result;
        } catch (Exception ex2) {
            return result;
        } finally {
             session.close();
        }

    }

    public List getProfesorAll() {
        List<Profesor> profesorList = null;
        try {
            session = HibernateSessionFactory.getSession();
            Transaction ts = session.beginTransaction();
            Query q = session.createQuery("from Profesor as profesor order by id_profesor");
            profesorList = (List<Profesor>) q.list();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return profesorList;
    }

    public List getProfesorById(Integer idPro) {

        List<Profesor> proList = null;
        try {
            Transaction tx = session.beginTransaction();
            Query q = session.createQuery("from Profesor WHERE id_profesor =" + idPro);
            proList = (List<Profesor>) q.list();
        } catch (Exception e) {
            log.debug("Error:" + e.getMessage());
            e.printStackTrace();
        }
        return proList;
    }

    /*
     public void addProfe(Profesor profesor) {
     Transaction trns = null;
     //session = HibernateUtil.getSessionFactory().openSession();
     session = HibernateSessionFactory.getSession();

     try {
     trns = session.beginTransaction();
     session.save(profesor);
     session.getTransaction().commit();
     System.out.println("Se agrego correctamente");
     } catch (RuntimeException e) {
     if (trns != null) {
     trns.rollback();
     }
     e.printStackTrace();
     } finally {
     session.flush();
     session.close();
     }
     }

     public void deleteProfesor(Profesor profesor) {
     Transaction trns = null;
     //Session session = HibernateUtil.getSessionFactory().openSession();
     session = HibernateSessionFactory.getSession();
     try {
     trns = session.beginTransaction();
     session.delete(profesor);
     session.getTransaction().commit();
     System.out.println("Se elimno correctamente");
     } catch (RuntimeException e) {
     if (trns != null) {
     trns.rollback();
     }
     e.printStackTrace();
     } finally {
     session.flush();
     session.close();
     }
     }

     public void updateProfe(Profesor profesor) {
     Transaction trns = null;
     Session session = HibernateUtil.getSessionFactory().openSession();
     try {
     trns = session.beginTransaction();
     session.update(profesor);
     session.getTransaction().commit();
     System.out.println("Se modifico correctamente");
     } catch (RuntimeException e) {
     if (trns != null) {
     trns.rollback();
     }
     e.printStackTrace();
     } finally {
     session.flush();
     session.close();
     }
     }

     public List<Profesor> getAllProfe() {
     List<Profesor> lisPro = new ArrayList<Profesor>();
     Transaction trns = null;
     //Session session = HibernateUtil.getSessionFactory().openSession();
     session = HibernateSessionFactory.getSession();
        
     try {
     trns = session.beginTransaction();
     lisPro = session.createQuery("from Profesor").list();
     } catch (RuntimeException e) {
     e.printStackTrace();
     } finally {
     session.flush();
     session.close();
     }
     return lisPro;
     }

     public Profesor getProfeById(int id_profesor) {
     Profesor profesor = null;
     Transaction trns = null;
     Session session = HibernateUtil.getSessionFactory().openSession();
     try {
     trns = session.beginTransaction();
     String queryString = "from profesor where id_profesor = :id";
     Query query = session.createQuery(queryString);
     query.setInteger("id_profesor", id_profesor);
     profesor = (Profesor) query.uniqueResult();
     } catch (RuntimeException e) {
     e.printStackTrace();
     } finally {
     session.flush();
     session.close();
     }
     return profesor;
     }
     */
}